package com.cms.jy.draft.util;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

/**
 * 草稿创建工具类
 * 支持创建新的文件夹并复制当前模板
 */
public class DraftCreator {
    
    /**
     * 基于模板创建新草稿
     * @param templatePath 模板路径
     * @param draftPath 草稿路径
     * @throws IOException IO异常
     */
    public static void createDraftFromTemplate(String templatePath, String draftPath) throws IOException {
        // 创建草稿目录
        Files.createDirectories(Paths.get(draftPath));
        
        // 复制模板文件到新草稿目录
        copyTemplateFiles(templatePath, draftPath);
    }
    
    /**
     * 复制模板文件到新草稿目录
     * @param templatePath 模板路径
     * @param draftPath 草稿路径
     * @throws IOException IO异常
     */
    public static void copyTemplateFiles(String templatePath, String draftPath) throws IOException {
        File templateDir = new File(templatePath);
        File draftDir = new File(draftPath);
        
        if (!templateDir.exists() || !templateDir.isDirectory()) {
            throw new IOException("模板目录不存在或不是目录: " + templatePath);
        }
        
        // 递归复制目录下的所有文件和文件夹
        copyDirectoryRecursively(templateDir, draftDir);
    }
    
    /**
     * 递归复制目录
     * @param source 源目录
     * @param target 目标目录
     * @throws IOException IO异常
     */
    private static void copyDirectoryRecursively(File source, File target) throws IOException {
        if (source.isDirectory()) {
            // 如果目标目录不存在则创建
            if (!target.exists()) {
                target.mkdirs();
            }
            
            // 获取源目录下的所有文件和子目录
            String[] files = source.list();
            if (files != null) {
                for (String file : files) {
                    File sourceFile = new File(source, file);
                    File targetFile = new File(target, file);
                    copyDirectoryRecursively(sourceFile, targetFile);
                }
            }
        } else {
            // 复制文件
            Path sourcePath = source.toPath();
            Path targetPath = target.toPath();
            Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
        }
    }
}